The Nu Html CheckerをAWS App Runnerで実行させる
はじめに
HTMLやCSS、SVGには仕様があり、Webアプリケーション開発などでは、それらの仕様に沿って画面が実装されることになります。
実装中の画面が、それらの仕様に沿ってマークアップされているのかどうか? を確認できるツールの1つがWorld Wide Web Consortium (W3C)で公開されているNu Html Checkerです。
ソースコードがGitHubでMITライセンスで公開されており、Dockerイメージもありますので、手軽にローカルの環境を構築することができます。
今回は、AWS CLI v2を使ってNu Html Checker をAWS App Runnerで動作させる手順をご紹介したいと思います。
手順の概要
- Docker Hubからイメージを取得
- 取得したイメージをAmazon Elastic Container Registry(ECR)に登録
- 登録したイメージを指定してAWS App Runnerサービスを作成
1. Docker Hubからイメージを取得
Nu Html CheckerのDockerイメージのURLを指定します。
$ docker pull validator/validator:latest
pull
が完了したら確認します。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE validator/validator latest 0d2eef07d029 3 days ago 96.6MB
問題なさそうです。
2. Amazon ECRにイメージを登録
ここからAWS CLI v2を使いますが、適切な権限を持ったIAMユーザーが実行環境に登録され、リージョンが指定され、output
には json
が指定されていることを前提とします。
まず、今回のイメージを登録するリポジトリがAmazon ECRにない場合は、以下の手順で作成します。
2.1 Amazon ECRにリポジトリを作成
ここでは、リポジトリ名 validator
を作成します。
$ aws ecr create-repository --repository-name validator
作成されると結果が表示されます。
{ "repository": { "repositoryArn": "arn:aws:ecr:<region>:xxxxxxxxxxxx:repository/validator", "registryId": "xxxxxxxxxxxx", "repositoryName": "validator", "repositoryUri": "xxxxxxxxxxxx.dkr.ecr.<region>.amazonaws.com/validator", "createdAt": "2021-07-07T00:00:00+09:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": false }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
念の為、describe-repositories
サブコマンドでも確認しておきます。
$ aws ecr describe-repositories
実行すると、先ほどと同様の結果が表示されます。
{ "repositories": [ { "repositoryArn": "arn:aws:ecr:<region>:xxxxxxxxxxxx:repository/validator", "registryId": "xxxxxxxxxxxx", "repositoryName": "validator", "repositoryUri": "xxxxxxxxxxxx.dkr.ecr.<region>.amazonaws.com/validator", "createdAt": "2021-07-07T00:00:00+09:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": false }, "encryptionConfiguration": { "encryptionType": "AES256" } } ] }
2.2 レジストリにログインする
Dockerイメージを登録するレジストリに docker
コマンドでログインする必要があります。以下のコマンドで一度に実行できますが、 <aws_account_id>
や <region>
などは、describe-repositories
サブコマンドの実行結果から読み替えて実行してください。
$ aws ecr get-login-password \ | docker login \ --username AWS \ --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
問題なくログインできれば Login Succeeded
と表示されます。
2.3 ローカルのDockerイメージにtagをつける
ローカルのDockerイメージにtagをつけます。形式は ドキュメントを参照してください。ここでは、タグは latest
とします。<IMAGE ID>
はローカルのIMAGE IDです。
$ docker tag <IMAGE ID> <aws_account_id>.dkr.ecr.<region>.amazonaws.com/validator
2.4 イメージをpushする
ECRのレジストリにイメージをpushします。
$ docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/validator
成功するとdigest値などが表示されます。
2.5 イメージの確認
list-images
サブコマンドで、登録したイメージを確認します。
$ aws ecr list-images --repository-name validator
結果が表示されます。
{ "imageIds": [ { "imageDigest": "sha256:xxxxxxx......", "imageTag": "v1.0" } ] }
3. App Runnerのサービスを作成
登録したイメージを指定してAWS App Runnerのサービスを作成します。
create-serviceサブコマンドのリファレンスを読む限り、なかなかパラメータが複雑そうです。
JSON形式のパラメータは改行をつけていますが、実際には1行で入力する必要があります。
aws apprunner create-service \ --service-name validator \ --source-configuration '{"ImageRepository": { "ImageIdentifier": "<aws_account_id>.dkr.ecr.<region>.amazonaws.com/validator", "ImageConfiguration": {"Port": "8888"}, "ImageRepositoryType": "ECR" }, "AuthenticationConfiguration": { "AccessRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/aws-service-role/apprunner.amazonaws.com/AWSServiceRoleForAppRunner" } }'
実行すると、実行結果がざっと表示されますが、"Status": "OPERATION_IN_PROGRESS"
になっています。
サービスの作成には数分かかります。
しばらく経ったら、 list-services
サブコマンドで確認します。
$ aws apprunner list-services
結果が返ってきます。
{ "ServiceSummaryList": [ { "ServiceName": "validator", "ServiceId": "xxxxxxxxxxxx", "ServiceArn": "arn:aws:apprunner:<region>:<aws_account_id>:service/validator/xxxxxxxxxxxx "ServiceUrl": "xxxxxxxxxxxx.<region>.awsapprunner.com", "CreatedAt": "2021-07-07T00:00:00+09:00", "UpdatedAt": "2021-07-07T00:00:00+09:00", "Status": "RUNNING" } ] }
"Status": "RUNNING"
であれば、サービスが正常に作成されています。 ServiceUrl
に https://
スキームでアクセスすると、W3Cと同じような画面が表示されます。